﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;
using System.Collections;
using System.ComponentModel;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using Microsoft.ApplicationBlocks.Data;

namespace Z16.BLI
{
    public class Demanda
    {
        #region "Variaveis"

        private long intCodDemanda;
        public long IntCodDemanda
        {
            get { return intCodDemanda; }
            set { intCodDemanda = value; }
        }

        private long intCodPrioridade;
        public long IntCodPrioridade
        {
            get { return intCodPrioridade; }
            set { intCodPrioridade = value; }
        }

        private string strNomePrioridade;
        public string StrNomePrioridade
        {
            get { return strNomePrioridade; }
            set { strNomePrioridade = value; }
        }

        private string strNomeDemanda;
        public string StrNomeDemanda
        {
            get { return strNomeDemanda; }
            set { strNomeDemanda = value; }
        }

        private DateTime dtDataInclusao;
        public DateTime DtDataInclusao
        {
            get { return dtDataInclusao; }
            set { dtDataInclusao = value; }
        }

        private DateTime dtInicio;
        public DateTime DtInicio
        {
            get { return dtInicio; }
            set { dtInicio = value; }
        }

        private DateTime dtTermino;
        public DateTime DtTermino
        {
            get { return dtTermino; }
            set { dtTermino = value; }
        }

        private string strDescricao;
        public string StrDescricao
        {
            get { return strDescricao; }
            set { strDescricao = value; }
        }


        private int intHoraEstimada;
        public int IntHoraEstimada
        {
            get { return intHoraEstimada; }
            set { intHoraEstimada = value; }
        }


        private long intCodUser;
        public long IntCodUser
        {
            get { return intCodUser; }
            set { intCodUser = value; }
        }

        private long codSolici;
        public long CodSolici
        {
            get { return codSolici; }
            set { codSolici = value; }
        }

        private string strSolici;
        public string StrSolici
        {
            get { return strSolici; }
            set { strSolici = value; }
        }

        private long intCodStatus;
        public long IntCodStatus
        {
            get { return intCodStatus; }
            set { intCodStatus = value; }
        }

        private string strStatus;
        public string StrStatus
        {
            get { return strStatus; }
            set { strStatus = value; }
        }

        private long intCodCliente;
        public long IntCodCliente
        {
            get { return intCodCliente; }
            set { intCodCliente = value; }
        }

        private string strNomeCliente;
        public string StrNomeCliente
        {
            get { return strNomeCliente; }
            set { strNomeCliente = value; }
        }

        private long intCodProjeto;
        public long IntCodProjeto
        {
            get { return intCodProjeto; }
            set { intCodProjeto = value; }
        }

        private string strNomeProjeto;
        public string StrNomeProjeto
        {
            get { return strNomeProjeto; }
            set { strNomeProjeto = value; }
        }

        #endregion

        #region "Metodos"
        /// <summary>
        /// Seleciona todas as Demandas.
        /// </summary>
        /// <returns></returns>
        public static List<Demanda> todasDemandas()
        {
            List<Demanda> allDemandas = new List<Demanda>();
            Demanda Demandas = new Demanda();

            //DANEntities context = new DANEntities();

            //IEnumerable<long> ter = from p in context.DEMANDAs select p.COD_DEMANDA;

            SqlDataReader drDemanda = SqlHelper.ExecuteReader(SqlHelper.GetSQLConnection(), CommandType.StoredProcedure, "");

            while (drDemanda.Read())
            {
                Demandas.IntCodDemanda = Convert.ToInt64( drDemanda["COD_DEMANDA"].ToString());
                Demandas.StrNomeDemanda = drDemanda["NOME_DEMANDA"].ToString();
                Demandas.IntCodPrioridade = Convert.ToInt64(drDemanda["COD_PRIORIDADE"].ToString());
                Demandas.StrNomePrioridade = drDemanda["NOME_PRIORIDADE"].ToString();
                Demandas.IntCodStatus = Convert.ToInt64(drDemanda["COD_STATUS"].ToString());
                Demandas.StrStatus = drDemanda["STATUS"].ToString();
                Demandas.IntCodCliente = Convert.ToInt64(drDemanda["COD_CLIENTE"].ToString());
                Demandas.StrNomeCliente = drDemanda["NOME_CLIENTE"].ToString();
                Demandas.DtDataInclusao = Convert.ToDateTime(drDemanda["DT_INCLUSAO"].ToString());
                Demandas.DtInicio = Convert.ToDateTime(drDemanda["DT_INICIO"].ToString());
                Demandas.DtTermino = Convert.ToDateTime(drDemanda["DT_TERMINO"].ToString());
                Demandas.StrDescricao = drDemanda["DESCRICAO"].ToString();
                Demandas.IntHoraEstimada = Convert.ToInt16(drDemanda["HORA_ESTIMADA"].ToString());
                Demandas.IntCodUser = Convert.ToInt64(drDemanda["COD_USER"].ToString());

                allDemandas.Add(Demandas);
 
            }
            return allDemandas;
        }

        /// <summary>
        ///  Inclusao inicial Demandas no sistema.
        /// </summary>
        /// <param name="strNomeDemanda"></param>
        /// <param name="intCodPrioridade"></param>
        /// <param name="intCodStatus"></param>
        /// <param name="intCodCliente"></param>
        /// <param name="dtInicio"></param>
        /// <param name="dtTermino"></param>
        /// <param name="strDescricao"></param>
        /// <param name="intHoraEstimada"></param>
        /// <param name="intCodUser"></param>
        /// <returns></returns>
        
        public string incDemandas(   string strNomeDemanda,
                                            string strDescDemanda,
                                            DateTime dtInicio,
                                            DateTime dtTermino,
                                            int intCodUsuSol,
                                            int intCodUsu,
                                            int intCodPrioridade,
                                            int intCodProj,
                                            int? codDemanda
                                            )
        {
            try
            {

                SqlParameter[] pms =
                    {
                        new SqlParameter("@NOME_DEMANDA", strNomeDemanda),
                        new SqlParameter("@DESCRICAO", strDescDemanda),
                        new SqlParameter("@DT_INICIO", dtInicio),
                        new SqlParameter("@DT_TERMINO", dtTermino),
                        new SqlParameter("@COD_USU_SOL", intCodUsuSol),
                        new SqlParameter("@COD_USU", intCodUsu),
                        new SqlParameter("@COD_PRIORIDADE", intCodPrioridade),
                        new SqlParameter("@COD_PROJETO", intCodProj),
                        new SqlParameter("@COD_DEMANDA", codDemanda) 
                    };

                if (codDemanda == null)
                {
                    SqlHelper.ExecuteNonQuery(SqlHelper.GetSQLConnection(), CommandType.StoredProcedure, "procIncDemanda", pms);

                    return "0;Demanda cadastrada com sucesso!";
                }
                else
                {
                    SqlHelper.ExecuteNonQuery(SqlHelper.GetSQLConnection(), CommandType.StoredProcedure, "procEditDemanda", pms);

                    return "0;Demanda editada com sucesso!";
                }
            }
            catch (Exception ex)
            {
                return "1;Erro ao inserir Demanda: " + ex.Message;
            }
        }

        public DataTable ListarDemandas(long? codDem, string demanda, DateTime? dtIni, DateTime? dtFim, int? codProj, int? codPri)
        {
            DataTable cc = new DataTable();

            SqlParameter[] pms =
                    {
                        new SqlParameter("@codDemanda",codDem),
                        new SqlParameter("@Demanda",demanda),
                        new SqlParameter("@DtInicio",dtIni),
                        new SqlParameter("@DtFim",dtFim),
                        new SqlParameter("@codProj",codProj),
                        new SqlParameter("@codPrioridade",codPri),
                    };

            try
            {
                SqlDataReader retorno = SqlHelper.ExecuteReader(SqlHelper.GetSQLConnection(), CommandType.StoredProcedure, "procSelDemanda", pms);

                cc.Load(retorno);
            }
            catch (Exception ex)
            {
                throw;
            }
            return cc;
        }

        public List<Demanda> listarProjeto()
        {
                SqlParameter[] pms =
                    {
                        new SqlParameter("@codProj",null),
                        new SqlParameter("@nome",null)
                    };

                List<Demanda> allClientes = new List<Demanda>();


                SqlDataReader drCliente = SqlHelper.ExecuteReader(SqlHelper.GetSQLConnection(), CommandType.StoredProcedure, "procSelProjeto", pms);
                while (drCliente.Read())
                {
                    Demanda Demandas = new Demanda();
                    Demandas.IntCodProjeto = Convert.ToInt64(drCliente["Cod_Projeto"].ToString());
                    Demandas.strNomeProjeto = drCliente["Projeto"].ToString();
                    allClientes.Add(Demandas);
                }
                return allClientes;

          
        }

        public List<Demanda> listarStatus()
        {
            SqlParameter[] pms =
                    {
                        new SqlParameter("@codStatus",null),
                    };

            List<Demanda> allClientes = new List<Demanda>();


            SqlDataReader drCliente = SqlHelper.ExecuteReader(SqlHelper.GetSQLConnection(), CommandType.StoredProcedure, "procSelStatus", pms);
            while (drCliente.Read())
            {
                Demanda Demandas = new Demanda();
                Demandas.intCodStatus = Convert.ToInt64(drCliente["Cod_Status"].ToString());
                Demandas.strStatus = drCliente["Nome_Status"].ToString();
                allClientes.Add(Demandas);
            }
            return allClientes;


        }

        public List<Demanda> listarPrioridade()
        {
            SqlParameter[] pms =
                    {
                        new SqlParameter("@codPrio",null),
                    };

            List<Demanda> allClientes = new List<Demanda>();


            SqlDataReader drCliente = SqlHelper.ExecuteReader(SqlHelper.GetSQLConnection(), CommandType.StoredProcedure, "procSelPrioridade", pms);
            while (drCliente.Read())
            {
                Demanda Demandas = new Demanda();
                Demandas.intCodPrioridade = Convert.ToInt64(drCliente["Cod_Prioridade"].ToString());
                Demandas.strNomePrioridade = drCliente["Prioridade"].ToString();
                allClientes.Add(Demandas);
            }
            return allClientes;


        }

        public List<Demanda> listarSolicitante()
        {
            SqlParameter[] pms =
                    {
                        new SqlParameter("@PERFIL",null),
                    };

            List<Demanda> allClientes = new List<Demanda>();


            SqlDataReader drCliente = SqlHelper.ExecuteReader(SqlHelper.GetSQLConnection(), CommandType.StoredProcedure, "procSelUsuarioPorPerfil", pms);
            while (drCliente.Read())
            {
                Demanda Demandas = new Demanda();
                Demandas.codSolici = Convert.ToInt64(drCliente["Cod_Usuario"].ToString());
                Demandas.strSolici = drCliente["Nome_Usuario"].ToString();
                allClientes.Add(Demandas);
            }
            return allClientes;


        }

        #endregion

    }
}